package com.heepay.config;

import com.alibaba.fastjson.JSON;
import com.heepay.util.SignUtil;
import lombok.extern.slf4j.Slf4j;

import java.util.Map;

@Slf4j
public class NotifyThread implements Runnable {

    private int count = 1;
    private String notifyUrl;
    private Map<String, Object> paramMap;

    public NotifyThread(){}

    public NotifyThread(String notifyUrl, Map<String, Object> paramMap) {
        this.notifyUrl = notifyUrl;
        this.paramMap = paramMap;
    }

    @Override
    public void run() {
        task();
    }

    private void task() {
        String result = SignUtil.sendRequest(paramMap,notifyUrl);
       // log.info(notifyUrl + "：" + result + " count：" + count);
        if(!"success".equals(result)) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //ScheduledTask.queue.offer(new NotifyVo(notifyUrl, paramMap));
            count++;
            if(count <= 5) {
                task();
                //log.info("失败重试：" + JSON.toJSONString(this));
            }
        }
    }


        /*
      解决幂等性问题方案：
         1. 设置数据库表中的 交易单号  唯一性   一旦重复调用成功，意味着将生成第二条单号
           此时会抛出异常 触发业务逻辑中的事务单元 进行回滚操作
          2.判断交易单号是否存在 存在 直接退出  不存在 继续执行业务
     */

}
